#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <stdio.h>

void a(int one){
    printf("%d\n", 3*one);
}

class A{
public:
    A() = default;
    A(int ii):i(ii){}
private:
    int i;
};

int main(){
    typedef boost::function<void (int one)> hello;
    typedef boost::function<void()> god;
    hello first = a;
    A b;
    first(4);
    hello second = boost::bind(&a, _1);
    second(10);
    god third = boost::bind(&a, 20);
    third();
}